package edu.hubu.shop9.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * @author waxijiang
 * 登录拦截
 */
public class LoginInterceptor implements HandlerInterceptor{

	/**
	 * 这个是我们主要去关注的方法  是在请求发生后执行的
	 */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("拦截器preHandle进来了");
		/**
		 * 某一些请求是不需要被拦截
		 */
		final String [] IGNORE_URL= {"login","loginPage", "easyui", "js", "image", "json"};
		boolean flag = false;
//		获取请求的路径，然后将他放行
		String servletPath = request.getServletPath();
//		遍历出所有的需要被放行的路径   contains  包含
		for(String s :IGNORE_URL){
			if(servletPath.contains(s)){
				flag = true;
				break;
			}
		}
//		真正的放行  USER_NAME 取出来，看是否存在
		if(!flag){
//		获取到USER_NAME
			Object username = request.getSession().getAttribute("USER_NAME");
//		看USER_NAME是否为null,如果不为null,就放行true
			if(username == null){
//				没有登录，没有信息 ，还可以携带一条信息
				request.setAttribute("msg", "对不起，你还没有登录，还不能访问！");
				request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
			}else{
				flag=true;
			}
		}

		return flag;
	}
	/**
	 * 是在Controller执行之后，运行的方法，主要可以模型和视图进行操作
	 * 但是这个方法是在preHandle返回true之后才能执行的方法
	 */
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("postHandle进来了");
	}
	/**
	 * 是整个的请求完成之后运行的方法，一般是进行一些清理工作的
	 * 是在preHandle返回true和postHandle不报错的情况下，才会执行
	 */
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("afterCompletion进来了");
	}

}
